<?php

class Application_Model_Proyectos extends Sgit_Model
{
    protected $_name = 'proyectos';
    protected $_primary = 'id';
    protected $_cache_activa = TRUE;

    public function getProyecto($id)
    {
        return $this->getProyectos('', $id);
    }



    public function getProyectosLite($values)
    {
        
        //permite pasar unico parametro id del contador
        if(is_numeric($values)){
            $id=$values;unset($values);$values['id']=$id;unset($id);
        } 
        
        
        
        
        $select = $this->getAdapter()->select();
        
        
        
        $nRacks = new Zend_Db_Expr("(SELECT count(*) FROM racks WHERE id_proyecto = proyectos.id) as nRacks"); 
        $nServicios = new Zend_Db_Expr('(SELECT count(*) FROM proyectos_servicios WHERE id_proyecto=proyectos.id) as nServicios');
        
        
        
        $select->from(array('proyectos'),array('*',$nServicios,$nRacks));
        
        $select->joinLeft('clientes', 'clientes.id = proyectos.id_cliente', array('cliente' => 'nombre', 'nif', 'raz_soc', 'doc_soc'));
        $select->joinLeft('salas', 'salas.id = proyectos.id_sala', array('sala' => 'nombre'));


        if (is_array($values['id']) || is_numeric($values['id']))
            $select->where("{$this->_name}.id IN (?)", $values['id']);


        if (is_numeric($values['id_zona']))
                $select->where("{$this->_name}.id_zona= ?", $values['id_zona']);
        if (is_numeric($values['activo']))
                $select->where("{$this->_name}.activo= ?", $values['activo']);
        if (is_numeric($values['mmr']))
                $select->where("{$this->_name}.mmr= ?", $values['mmr']);
        if (is_numeric($values['id_cliente']))
                $select->where("{$this->_name}.id_cliente= ?", $values['id_cliente']);
        if (is_numeric($values['id_sala']))
                $select->where("{$this->_name}.id_sala= ?", $values['id_sala']);  
        if (is_numeric($values['id_dir']))
                $select->where("{$this->_name}.id_dir= ?", $values['id_dir']);  
        if (is_numeric($values['id_pep']))
                $select->where("{$this->_name}.id_pep= ?", $values['id_pep']);       
        
        $rows = $this->getAdapter()->fetchAll($select);
        
        
        $sector= new Sgit_Form_Element_Select_Xml('Sector');
        $tip_fact=new Sgit_Form_Element_Select_TipoFacturacion('tip_fact');
        $id_tip_disp=new Sgit_Form_Element_Select_TipoDisponibilidad('id_tip_disp');
        $tipo_gestion=new Sgit_Form_Element_Select_TipoGestion('tipo_gestion');
        $mod_dispon=new Sgit_Form_Element_Select_ModalidadDisponibilidad('mod_dispon');
        $tipo_alojamiento=new Sgit_Form_Element_Select_TipoAlojamiento('tipo_alojamiento');
        
        
        
        $circuitos= new Application_Model_Circuitos();
        $contadores= new Application_Model_Contadores();





        foreach($rows as $k => $v)
        {
            
            
            if( !$this->_cc1[$v['id_zona']]) $this->_cc1[$v['id_zona']]= $circuitos->getCCByProyectosZona($v['id_zona']);
            if( !$this->_cc2[$v['id_zona']]) $this->_cc2[$v['id_zona']]= $contadores->getCCByProyectosZona($v['id_zona']);
            
            
           
            
            if($v['id_tip_disp']==2){
                $a= explode('.',(string) $v['racks']);
                if($a[1]{0}==3 || $a[1]{0}==6){
                    $rows[$k]['n_racks']=(float) $a[0].'.'.$a[1].$a[1].$a[1].$a[1].$a[1].$a[1];
                }else{
                    $rows[$k]['n_racks']=$v['racks'];
                }
            }

            if($v['id_tip_disp']==1){
                $rows[$k]['superficie_contratada']=round($v['sup_contr'],2);
            }else{
                $rows[$k]['superficie_contratada']=round($rows[$k]['n_racks']*3,2);
            }
            
            
            if($v['id_tip_disp']==1){
                $rows[$k]['potencia_contrada']=round($v['pot_contr']*$rows[$k]['superficie_contratada']);
            }else{
                $rows[$k]['potencia_contrada']=round($v['pot_contr']*$rows[$k]['n_racks']);
            }
            
            
            $rows[$k]['elect_text']=Sgit_Util_SiNo::run($v['activo'],true); 
            $rows[$k]['uc_text']=Sgit_Util_SiNo::run($v['uc'],true); ; 
            $rows[$k]['mmr_text']=Sgit_Util_SiNo::run($v['mmr'],true); 
            
            
            
            $rows[$k]['cliente']=array('nombre'=>$v['cliente'],'cif'=>$v['nif'],'raz_soc'=>$v['raz_soc'], 'doc_soc'=>$v['doc_soc']);
            
            $rows[$k]['sector']=$sector->getMultiOption($v['id_sector']);
            $rows[$k]['tipo_facturacion']=$tip_fact->getMultiOption($v['tip_fact']);
            $rows[$k]['jp']=($v['id_dir']) ? Sgit_Cache::single()->model('Usuario')->getKey($v['id_dir']) :'';
            
            $rows[$k]['tipo_disponibilidad']=$id_tip_disp->getMultiOption($v['id_tip_disp']);
            $rows[$k]['gestion']=$tipo_gestion->getMultiOption($v['tipo_gestion']);
            $rows[$k]['modalidad_disponibilidad']=$mod_dispon->getMultiOption($v['mod_dispon']);
            
            $rows[$k]['tipo_de_alojamiento']=$tipo_alojamiento->getMultiOption($v['tipo_alojamiento']);


           
            if($rows[$k]['superficie_contratada']){
                $rows[$k]['potencia_contrada_wm2']=round( $rows[$k]['potencia_contrada']/$rows[$k]['superficie_contratada'],0);
                $rows[$k]['pot_comprometida_wm2']=round( $rows[$k]['pot_comprometida']/$rows[$k]['superficie_contratada'],0);
                $rows[$k]['potencia_wm2']=round( $rows[$k]['potencia']/$rows[$k]['superficie_contratada'],0);
                
            }
            
            if( $rows[$k]['n_racks'] ){
                $rows[$k]['potencia_contrada_rack']=round( $rows[$k]['potencia_contrada']/$rows[$k]['n_racks'],0);
                $rows[$k]['pot_comprometida_rack']=round( $rows[$k]['pot_comprometida']/$rows[$k]['n_racks'],0);
                $rows[$k]['potencia_rack']=round( $rows[$k]['potencia']/$rows[$k]['n_racks'],0);
            }
        
        
        
            
            $rows[$k]['cc']=array_merge((array)$this->_cc1[$v['id_zona']][$v['id']],(array)$this->_cc2[$v['id_zona']][$v['id']]);
            
            $rows[$k]['cc']=array_unique( $rows[$k]['cc']);
            sort($rows[$k]['cc']);
            $rows[$k]['cc']=implode(' | ',$rows[$k]['cc']);
       

        }



                
        if (is_numeric($values['id']))
            return $rows[0];
        else
            return $rows;

    }



    public function getProyectos($values = array(), $id = null)
    {
        $select = $this->getAdapter()
        ->select()
        ->from(array('proyectos'))
        ->joinLeft('clientes', 'clientes.id = proyectos.id_cliente', array('cliente' => 'nombre', 'nif', 'raz_soc', 'doc_soc'))
        ->joinLeft('salas', 'salas.id = proyectos.id_sala', array('sala' => 'nombre'));


        if (!is_null($id))
        {
            $select->where("proyectos.id= ?", $id);
        } else
        {
            if (is_numeric($values['id_zona']))
                $select->where("proyectos.id_zona= ?", $values['id_zona']);
            if (is_numeric($values['activo']))
                $select->where("proyectos.activo= ?", $values['activo']);
            if (is_numeric($values['mmr']))
                $select->where("proyectos.mmr= ?", $values['mmr']);
            if (is_numeric($values['id_cliente']))
                $select->where("proyectos.id_cliente= ?", $values['id_cliente']);
            if (is_numeric($values['id_sala']))
                $select->where("proyectos.id_sala= ?", $values['id_sala']);  
            if (is_numeric($values['id_dir']))
                $select->where("proyectos.id_dir= ?", $values['id_dir']);      
        }

        

        $rows = $this->getAdapter()->fetchAll($select);

        $circuitos  =new Application_Model_Circuitos();
        $contadores =new Application_Model_Contadores();
        $racks      =new Application_Model_Racks();
        $servicios  =new Application_Model_Servicios();

        $sector         = new Sgit_Form_Element_Select_Xml('Sector');
        $tip_fact       = new Sgit_Form_Element_Select_TipoFacturacion('tip_fact');
        $id_tip_disp    = new Sgit_Form_Element_Select_TipoDisponibilidad('id_tip_disp');
        $tipo_gestion   = new Sgit_Form_Element_Select_TipoGestion('tipo_gestion');
        $mod_dispon     = new Sgit_Form_Element_Select_ModalidadDisponibilidad('mod_dispon');
        $tipo_alojamiento=new Sgit_Form_Element_Select_TipoAlojamiento('tipo_alojamiento');
        
        
        foreach($rows as $k => $v)
        {
            
            
            if($v['id_tip_disp']==2){
                $a= explode('.',(string) $v['racks']);
                if($a[1]{0}==3 || $a[1]{0}==6){
                    $rows[$k]['n_racks']=(float) $a[0].'.'.$a[1].$a[1].$a[1].$a[1].$a[1].$a[1];
                }else{
                    $rows[$k]['n_racks']=$v['racks'];
                }
            }

            if($v['id_tip_disp']==1){
                $rows[$k]['superficie_contratada']=round($v['sup_contr'],2);
            }else{
                $rows[$k]['superficie_contratada']=round($rows[$k]['n_racks']*3,2);
            }
            
            
            if($v['id_tip_disp']==1){
                $rows[$k]['potencia_contrada']=round($v['pot_contr']*$rows[$k]['superficie_contratada']);
            }else{
                $rows[$k]['potencia_contrada']=round($v['pot_contr']*$rows[$k]['n_racks']);
            }
            
            
            $rows[$k]['elect_text']=Sgit_Util_SiNo::run($v['activo'],true); 
            $rows[$k]['uc_text']=Sgit_Util_SiNo::run($v['uc'],true); ; 
            $rows[$k]['mmr_text']=Sgit_Util_SiNo::run($v['mmr'],true); 
            
            
            
            $rows[$k]['circuitos']=$circuitos->getCircuitos(array('id_proyecto'=>$v['id']));
            
            
            
            
            $rows[$k]['contadores']=$contadores->getContadores(array('id_proyecto'=>$v['id']));
            $rows[$k]['racks']=$racks->getRacks(array('id_proyecto'=>$v['id']));
            $rows[$k]['servicios']=$servicios->getServicios(array('id_proyecto'=>$v['id']));
            
         
            $rows[$k]['cliente']=array('nombre'=>$v['cliente'],'cif'=>$v['nif'],'raz_soc'=>$v['raz_soc'], 'doc_soc'=>$v['doc_soc']);
            
            $rows[$k]['sector']=$sector->getMultiOption($v['id_sector']);
            $rows[$k]['tipo_facturacion']=$tip_fact->getMultiOption($v['tip_fact']);
            $rows[$k]['jp']=($v['id_dir']) ? Sgit_Cache::single()->model('Usuario')->getKey($v['id_dir']) :'';
            
            $rows[$k]['tipo_disponibilidad']=$id_tip_disp->getMultiOption($v['id_tip_disp']);
            $rows[$k]['gestion']=$tipo_gestion->getMultiOption($v['tipo_gestion']);
            $rows[$k]['modalidad_disponibilidad']=$mod_dispon->getMultiOption($v['mod_dispon']);
            
            $rows[$k]['tipo_de_alojamiento']=$tipo_alojamiento->getMultiOption($v['tipo_alojamiento']);

            foreach($rows[$k]['contadores'] as $v)
            {
                $rows[$k]['cc'][]=$v['cc'];
                $rows[$k]['potencia']+=$v['potencia'];
            }
            
            
       
            
            foreach($rows[$k]['circuitos'] as $v)
            {
                $rows[$k]['cc'][]=$v['cuadro']['cc'];
            }
            

            $rows[$k]['potencia']=round($rows[$k]['potencia']*1000);
            
            
            if($rows[$k]['potencia_contrada'])
                $rows[$k]['porcentaje']=round(100*$rows[$k]['potencia']/$rows[$k]['potencia_contrada'],0);

            if($rows[$k]['cc']) 
                $rows[$k]['cc']=implode('-',@array_unique($rows[$k]['cc']));
            

            
            $rows[$k]['nServicios']=count($v['servicios']);
            $rows[$k]['nRacks']=count($v['racks']);
            
            
            
            
           
            if($rows[$k]['superficie_contratada']){
                $rows[$k]['potencia_contrada_wm2']=round( $rows[$k]['potencia_contrada']/$rows[$k]['superficie_contratada'],0);
                $rows[$k]['pot_comprometida_wm2']=round( $rows[$k]['pot_comprometida']/$rows[$k]['superficie_contratada'],0);
                $rows[$k]['potencia_wm2']=round( $rows[$k]['potencia']/$rows[$k]['superficie_contratada'],0);
                
            }
            
            if( $rows[$k]['n_racks'] ){
                $rows[$k]['potencia_contrada_rack']=round( $rows[$k]['potencia_contrada']/$rows[$k]['n_racks'],0);
                $rows[$k]['pot_comprometida_rack']=round( $rows[$k]['pot_comprometida']/$rows[$k]['n_racks'],0);
                $rows[$k]['potencia_rack']=round( $rows[$k]['potencia']/$rows[$k]['n_racks'],0);
            }
        
        
       

        }




        if (is_null($id))
            return $rows;
        else
            return $rows[0];

    }



    public function getClientes($id_zona)
    {
        
        $select = $this->getAdapter()->select();
        $select->from(array('proyectos',array('')));
        $select->joinLeft('clientes', 'clientes.id = proyectos.id_cliente', array('cliente' => 'nombre', 'nif', 'raz_soc', 'doc_soc'));
        $select->where("proyectos.id_zona= ?", $id_zona);
        $select->group('id_cliente');
        $select->order('cliente');
        $rows = $this->getAdapter()->fetchAll($select);
        return $this->assocArray2($rows,'id_cliente','cliente');
        

    }
    




    public function GetProyectosByPep($values = array(), $id = null)
    {

        $select = $this->getAdapter()->select();

        $select->from(array('proyectos'));
        $select->joinLeft('usuarios', 'usuarios.id = proyectos.id_dir', array('responsable' => 'nombre'));


        if (!is_null($id))
            $select->where("proyectos.id= ?", $id);


        $estado = ($values['activo']) ? $values['activo'] : 1;

        $select->where('proyectos.id_zona= ?', $this->_idZona);


        $activo = ($values['activo']) ? $values['activo'] : 1;
        if (!$id)
            $select->where('proyectos.activo= ?', $activo);

        $select->group('orden');

        $rows = $this->getAdapter()->fetchAll($select);

        $rows = $this->_preparabypep($rows);

        if (is_null($id))
            return $rows;
        else
            return $rows[0];

    }

    function _preparabypep($rows)
    {

        foreach ($rows as $k => $v)
        {
            if (strpos($v['nombre'], '|') == true)
                $rows[$k]['nombre'] = strstr($v['nombre'], '|', true);
            else
                $rows[$k]['nombre'] = $v['nombre'];


            $rows[$k]['mmr_text'] = Sgit_Util_SiNo::run($v['mmr'], true);
            $rows[$k]['uc_text'] = Sgit_Util_SiNo::run($v['uc'], true);


        }

        return $rows;
    }
    
    function consumoProyecto($id_proyecto,$mes,$anio)
    {





         $contadores=$m_contadores->getCol('id',array('id_proyecto'=>$id_proyecto));
         
         
         
         foreach($contadores as $id_contador)
         {
            $lectura= $m_lecturas->getConsumo($id_contador,$anio,$mes);
            $proyecto['consumo']+=$lectura['consumo'];
            $proyecto['consumo_anterior']+=$lectura['consumo_anterior'];
            
         }
         
         
         
    } 
            
    
    
           
    

}
